# ============================================================
# * Copyright © hk. 2022-2025. All rights reserved.
# * File name: CMakeLists.txt
# * Author   : 苏木
# * Date     : 2025-05-22
# * Version  : 
# * Description: cmake version 3.16.3
# ============================================================
## https://cmake.com.cn/cmake/help/latest/guide/tutorial/index.html
## https://cmake.org/cmake/help/latest/

# 指定 CMake 的最低版本要求
# --------------------------------------------------
cmake_minimum_required(VERSION 3.10)


# 设置项目名称和使用的编程语言
# --------------------------------------------------
project(SPROJECT C)


# 指定可执行程序和源文件
# --------------------------------------------------
add_executable(app_demo.out main.c)


# if语句
# --------------------------------------------------
# if(expression1)
# 	# commands ...
# elseif(expression2)
# 	# commands ...
# else()
# 	# commands ...
# endif()
# 早期版本的CMake要求将expression1作为else()和endif()的参数，自从CMake 2.8.0之后就没有这个要求了。
# 尽管遇到使用这种旧形式的项目和示例代码仍然很常见，因为它读起来有些混乱，所以不推荐新项目使用这种形式。
# 新项目应该保留else()和endif()参数为空。
# if()中的表达式，可以用${}也可以不用，${}的存在可能会出现变量展开，用的时候最好注意一下。

# 1. 最基本的表达式：if(value) 如果value是一个没有引号的常数 
# 值为1、ON、YES、TRUE、Y或一个非零数，将视为TRUE。不区分大小写。
# 值为0、OFF、NO、FALSE、N、IGNORE、NOTFOUND、空字符串或以-NOTFOUND结尾的字符串，则将其视为FALSE。同样，不区分大小写。
message(STATUS "==> value是一个没有引号的常数")
if(1)
	message(STATUS "if(1)")
else()
	message(STATUS "else(1)")
endif()

if(YES)
	message(STATUS "if(YES)")
else()
	message(STATUS "else(YES)")
endif()

if(IGNORE)
	message(STATUS "if(IGNORE)")
else()
	message(STATUS "else(IGNORE)")
endif()

if( )
	message(STATUS "if( )")
else()
	message(STATUS "else( )")
endif()

if(VAR-NOTFOUND)
	message(STATUS "if(VAR-NOTFOUND)")
else()
	message(STATUS "else(VAR-NOTFOUND)")
endif()
message("")

# 2. if(<variable|string>) 如果value是一个带引号的引用或者字符串
message(STATUS "==> value是一个有引号的引用或者字符串")
# These are also treated as unquoted constants because the
# variable evaluation occurs before if() sees the values
set(A YES)
if(${A}) # Evaluates to true
	message(STATUS "if(\${A})")
else()
	message(STATUS "else(\${A})")
endif()
set(B 0)
if(${B}) # Evaluates to false
	message(STATUS "if(\${B})")
else()
	message(STATUS "else(\${B})")
endif()

# Does not match any of the true or false constants, so proceed
# to testing as a variable name in the fall through case below
# 当使用无引号的变量名时，将该变量的值会与假常量进行比较。如果这些值都不匹配，则表达式的结果为真。
# 未定义的变量将计算为一个空字符串，该字符串与一个False常量匹配，因此将产生一个False结果。
if(someLetters)
	message(STATUS "if(someLetters)")
else()
	message(STATUS "else(someLetters)")
endif()

# Quoted value, so bypass the true/false constant matching
# and fall through to testing as a variable name or string
# 不管字符串的值是多少，在CMake 3.1或更高版本中，一个带引号的字符串总是计算为False。
# 在CMake 3.1之前，如果字符串的值与现有变量的名称匹配，那么引用字符串将替换为该变量的名称(未引用)，进行重复测试。
if("someLetters")
	message(STATUS "if(\"someLetters\")")
else()
	message(STATUS "else(\"someLetters\")")
endif()
